package com.rpc.proxy;

import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.rpc.model.RpcRequest;
import com.rpc.model.RpcResponse;
import com.rpc.serializer.JdkSerializer;
import com.rpc.serializer.Serializer;
import lombok.extern.slf4j.Slf4j;

import java.io.IOException;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * Mock服务代理（JDK动态代理）
 */
@Slf4j
public class MockServiceProxy implements InvocationHandler {


    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
       //根据方法返回值类型，生成特定的默认值对象
        Class<?> methodReturnType = method.getReturnType();
        log.info("mock invoke {}", method.getName());
        return getDefaultObject(methodReturnType);
    }

    /**
     * 生成制定类型默认值对象（可自行完善默认值逻辑）
     * @param type
     * @return
     */
    private Object getDefaultObject(Class<?> type) {
        //基本类型
        if(type.isPrimitive()) {
            if(type == boolean.class) {
                return false;
            }else if(type == short.class){
                return (short)0;
            }else if(type == int.class) {
                return 0;
            }else if(type == long.class) {
                return 0L;
            }
        }
        //对象类型
        return null;
    }
}
